﻿Public Class frm_Inscripcion
    Enum estado
        insertar
        eliminar
        ver
    End Enum

    Dim _accesoBD As New AccesoBD
    Dim _accion As estado
    Dim _legajo, _idCurso, _precio As Integer
    Dim _fecha As DateTime
    Dim _nombre, _apellido, _curso As String

    Private Sub btn_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salir.Click
        Me.Close()
    End Sub

    Private Sub frm_ABM_Inscripcion_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If MessageBox.Show("Esta seguro que desea salir?!", "Importante", MessageBoxButtons.YesNo, MessageBoxIcon.Question) _
                    = Windows.Forms.DialogResult.No Then
            e.Cancel = True
        Else
            e.Cancel = False
        End If
    End Sub

    Private Sub cargar_grilla_alumnos()
        Dim tabla As New DataTable
        Dim consulta As String = ""

        consulta = "select legajoAlumno,nombre,apellido from Alumnos where estado = 0"

        tabla = _accesoBD.ejecutaSQL(consulta)

        Me.grid_alumnos.Rows.Clear()

        Dim c As Integer = 0

        For c = 0 To tabla.Rows.Count - 1
            Me.grid_alumnos.Rows.Add(tabla.Rows(c)("legajoAlumno"), tabla.Rows(c)("nombre"), tabla.Rows(c)("apellido"))
        Next

    End Sub

    Private Sub cargar_grilla_cursos()
        Dim tabla As New DataTable
        Dim consulta As String = ""

        consulta = "SELECT Cursos.idCurso, TipoCurso.nombre, Cursos.fechaInicio, Turnos.nombre AS turno, Cursos.precio"
        consulta &= " FROM Cursos INNER JOIN"
        consulta &= " TipoCurso ON Cursos.idTipoCurso = TipoCurso.idTipoCurso INNER JOIN"
        consulta &= " Turnos ON Cursos.idTurno = Turnos.idTurno"

        tabla = _accesoBD.ejecutaSQL(consulta)

        Me.grilla_cursos.Rows.Clear()

        Dim c As Integer = 0

        For c = 0 To tabla.Rows.Count - 1
            Me.grilla_cursos.Rows.Add(tabla.Rows(c)("idCurso"), tabla.Rows(c)("nombre"), FormatDateTime(tabla.Rows(c)("fechaInicio")), tabla.Rows(c)("turno"), tabla.Rows(c)("precio"))
        Next

    End Sub

    Private Sub cargar_grilla_alumnos_busqueda()
        Dim consulta As String
        Dim tabla As New DataTable

        consulta = "select legajoAlumno,nombre,apellido from Alumnos where estado = 0"
        consulta &= " and nombre like '" & Me.txt_nombre_busca.Text & "'"
        consulta &= " or apellido like '" & Me.txt_apellido_busca.Text & "'"

        tabla = _accesoBD.ejecutaSQL(consulta)

        Me.grid_alumnos.Rows.Clear()

        Dim c As Integer = 0

        For c = 0 To tabla.Rows.Count - 1
            Me.grid_alumnos.Rows.Add(tabla.Rows(c)("legajoAlumno"), tabla.Rows(c)("nombre"), tabla.Rows(c)("apellido"))
        Next
    End Sub

    Private Sub cargar_grilla_cursos_busqueda()
        Dim consulta As String
        Dim tabla As New DataTable

        consulta = "SELECT Cursos.idCurso, TipoCurso.nombre, Cursos.fechaInicio, Turnos.nombre AS turno, Cursos.precio"
        consulta &= " FROM Cursos INNER JOIN"
        consulta &= " TipoCurso ON Cursos.idTipoCurso = TipoCurso.idTipoCurso INNER JOIN"
        consulta &= " Turnos ON Cursos.idTurno = Turnos.idTurno"
        consulta &= " WHERE Cursos.idTipoCurso = " & Me.cmbBusqCurso.SelectedValue

        tabla = _accesoBD.ejecutaSQL(consulta)

        Me.grilla_cursos.Rows.Clear()

        Dim c As Integer = 0

        For c = 0 To tabla.Rows.Count - 1
            Me.grilla_cursos.Rows.Add(tabla.Rows(c)("idCurso"), tabla.Rows(c)("nombre"), FormatDateTime(tabla.Rows(c)("fechaInicio")), tabla.Rows(c)("turno"), tabla.Rows(c)("precio"))
        Next
    End Sub

    Private Sub cargar_combos()
        _accesoBD.load_combo(Me.cmbBusqCurso, _accesoBD.devuelveTabla("TipoCurso"), "idTipoCurso", "nombre")
    End Sub

    Private Sub frm_ABM_Inscripcion_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        _accion = estado.ver
        comportamientoBotones()
        Me.cargar_grilla_alumnos()
        Me.cargar_combos()
        Me.cargar_grilla_cursos()
        Me.cargarGrillaInscriptos()
    End Sub

    Private Sub btn_buscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_buscar.Click
        If String.IsNullOrWhiteSpace(Me.txt_nombre_busca.Text) And String.IsNullOrWhiteSpace(Me.txt_apellido_busca.Text) Then
            Me.cargar_grilla_alumnos()
        Else
            Me.cargar_grilla_alumnos_busqueda()
        End If
    End Sub

    Private Sub btn_refrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_refrescar.Click
        Me.cargar_grilla_alumnos()
        Me.cargar_grilla_cursos()
        Me.cmbBusqCurso.SelectedIndex = -1
        Me.txt_apellido_busca.Text = ""
        Me.txt_nombre_busca.Text = ""
    End Sub

    Private Sub comportamientoBotones()
        If _accion = estado.ver Or _accion = estado.eliminar Then
            Me.grupoAlumnos.Enabled = False
            Me.grupoCursos.Enabled = False
            Me.btn_grabar.Enabled = False
        Else
            Me.grupoAlumnos.Enabled = True
            'Me.grupoCursos.Enabled = True
            Me.btn_grabar.Enabled = True
        End If
    End Sub

    Private Sub btn_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo.Click
        _accion = estado.insertar
        comportamientoBotones()
    End Sub

    Private Sub btn_grabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_grabar.Click
        If validarCantCuotas(_idCurso) Then
            If hayCupo() Then
                If Me.validarExistente Then
                    If MessageBox.Show(Me.mensaje & vbCrLf & "Desea realizar la acción?", "Importante", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
                        Me.insertar()
                        Me.cargarGrillaInscriptos()
                        Me.limpiarElementos()
                        MessageBox.Show("Se grabo correctamente !", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        _accion = estado.ver
                        Me.comportamientoBotones()
                    End If
                Else
                    MessageBox.Show("Ya existe el alumno inscripto en el curso", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End If
            Else
                MessageBox.Show("El curso seleccionado no tiene cupos disponibles", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        End If
    End Sub

    Private Sub insertar()
        Dim consulta, aux As String
        Dim tabla As New DataTable
        Dim _nroCuota, _precio, interes, c As Integer
        Dim _fechaVencimiento As DateTime

        aux = "select * from Cuotas where idCurso = " & _idCurso & " and fechaInicio = '" & _fecha & "'"
        tabla = _accesoBD.ejecutaSQL(aux)
        For c = 0 To tabla.Rows.Count - 1
            _nroCuota = tabla.Rows(c)("nroCuota")
            _precio = tabla.Rows(c)("precio")
            interes = tabla.Rows(c)("interes")
            _fechaVencimiento = tabla.Rows(c)("fechaVencimiento")

            consulta = "insert into CuotasXAlumno (legajoAlumno,idCurso,fechaInicio,nroCuota,precio,fechaVencimiento,interes) values( "
            consulta &= _legajo & ", " & _idCurso & ", '" & _fecha & "', " & _nroCuota & ", " & _precio & ", '" & _fechaVencimiento & "', " & interes & ")"

            _accesoBD._insertar(consulta)
        Next
    End Sub

    Private Sub cargarGrillaInscriptos()
        Dim consulta As String
        Dim tabla As New DataTable

        consulta = "SELECT distinct Alumnos.legajoAlumno, Alumnos.nombre, Alumnos.apellido, TipoCurso.nombre AS curso, CuotasXAlumno.fechaInicio"
        consulta &= " FROM CuotasXAlumno INNER JOIN"
        consulta &= " Alumnos ON CuotasXAlumno.legajoAlumno = Alumnos.legajoAlumno INNER JOIN"
        consulta &= " Cursos ON CuotasXAlumno.idCurso = Cursos.idCurso AND CuotasXAlumno.fechaInicio = Cursos.fechaInicio INNER JOIN"
        consulta &= " TipoCurso ON Cursos.idTipoCurso = TipoCurso.idTipoCurso"

        tabla = _accesoBD.ejecutaSQL(consulta)

        Me.grillaInscriptos.Rows.Clear()

        Dim c As Integer = 0

        For c = 0 To tabla.Rows.Count - 1
            Me.grillaInscriptos.Rows.Add(tabla.Rows(c)("legajoAlumno"), tabla.Rows(c)("nombre"), tabla.Rows(c)("apellido"), tabla.Rows(c)("curso"), FormatDateTime(tabla.Rows(c)("fechaInicio")))
        Next
    End Sub

    Public Function validarExistente() As Boolean
        Dim consulta As String
        Dim tabla As New DataTable

        consulta = "select * from CuotasXAlumno where legajoAlumno = " & _legajo
        consulta &= " and idCurso = " & _idCurso & " and fechaInicio = '" & _fecha & "'"

        tabla = _accesoBD.ejecutaSQL(consulta)

        If tabla.Rows.Count = 1 Then
            Return False
        Else
            Return True
        End If
    End Function

    Private Sub grid_alumnos_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid_alumnos.CellClick
        Me.grupoCursos.Enabled = True
        _legajo = Me.grid_alumnos.CurrentRow.Cells("col_legajo").Value
        _nombre = Me.grid_alumnos.CurrentRow.Cells("col_nombre").Value.ToString
        _apellido = Me.grid_alumnos.CurrentRow.Cells("col_apellido").Value.ToString
    End Sub

    Private Sub grilla_cursos_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grilla_cursos.CellClick
        _idCurso = Me.grilla_cursos.CurrentRow.Cells("col_curso").Value
        _fecha = Me.grilla_cursos.CurrentRow.Cells("col_fecha").Value.ToString
        _curso = Me.grilla_cursos.CurrentRow.Cells("columnaCurso").Value.ToString
        _precio = Me.grilla_cursos.CurrentRow.Cells("col_precio").Value.ToString
        Me.validarCantCuotas(_idCurso)
    End Sub

    Private Function mensaje() As String
        Dim cadena As String
        cadena = "Va a inscribir el alumno " & _apellido & ", " & _nombre & " en el curso " & _curso
        Return cadena
    End Function

    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        _legajo = Me.grillaInscriptos.CurrentRow.Cells("col_leg").Value
        _curso = Me.grillaInscriptos.CurrentRow.Cells("col_curso_nombre").Value
        If MessageBox.Show("Esta seguro que desea eliminar el registro?!", "Importante", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            Me.eliminar(_legajo, _curso)
            Me.cargarGrillaInscriptos()
            _accion = estado.ver
            comportamientoBotones()
        End If
    End Sub

    Private Sub eliminar(ByVal legajo As Integer, ByVal curso As String)
        Dim consulta As String
        Dim dt As New DataTable
        Dim idCurso As Integer
        consulta = "select distinct t.idTipoCurso from TipoCurso t, CuotasXAlumno c "
        consulta &= " where c.idCurso = t.idTipoCurso and c.legajoAlumno = " & legajo & " and t.nombre like '" & curso & "'"
        dt = _accesoBD.ejecutaSQL(consulta)
        idCurso = dt.Rows(0)(0)
        consulta = "delete from CuotasXAlumno where legajoAlumno = " & legajo & " and idCurso = " & idCurso
        _accesoBD._eliminar(consulta)
    End Sub

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        If Me.cmbBusqCurso.SelectedValue = -1 Then
            Me.cargar_grilla_cursos()
        Else
            Me.cargar_grilla_cursos_busqueda()
        End If
    End Sub

    Private Sub btn_cancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cancelar.Click
        _accion = estado.ver
        comportamientoBotones()
    End Sub

    Private Function hayCupo() As Boolean
        Dim ConsultaCupo, ConsultaInsc As String
        Dim tCupo, tDisp As New DataTable
        Dim cupo, insc As Integer

        ConsultaCupo = "select cupo from Cursos where idCurso = " & _idCurso
        tCupo = _accesoBD.ejecutaSQL(ConsultaCupo)
        cupo = tCupo.Rows(0)("cupo")

        ConsultaInsc = "select COUNT(idCurso) from CuotasXAlumno where idCurso = " & _idCurso
        tDisp = _accesoBD.ejecutaSQL(ConsultaInsc)
        insc = tDisp.Rows(0)(0)

        If (cupo - insc) >= 1 Then
            Return True
        Else
            Return False
        End If
    End Function

    Private Sub limpiarElementos()
        Me.grid_alumnos.ClearSelection()
        Me.grilla_cursos.ClearSelection()
    End Sub

    Private Function validarCantCuotas(ByVal idCurso As Integer) As Boolean
        Dim aux, aux2 As String
        Dim dt, dt2 As New DataTable
        Dim cuotas, cargadas As Integer

        aux = "select cantCuotas from Cursos where idCurso = " & idCurso
        dt = _accesoBD.ejecutaSQL(aux)
        cuotas = dt.Rows(0)(0)

        aux2 = "select COUNT(idCurso) from Cuotas where idCurso = " & idCurso
        dt2 = _accesoBD.ejecutaSQL(aux2)
        cargadas = dt2.Rows(0)(0)

        If (cuotas - cargadas) = 0 Then
            Return True
        Else
            If MessageBox.Show("Faltan cargar cuotas en el curso, Desea cargarlas ahora?", "Cuotas", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
                Dim _cuotas As New frm_ABM_Cuotas
                _cuotas.txt_id.Text = _idCurso
                _cuotas.txt_tipo.Text = _curso
                _cuotas.txt_fecha_curso.Text = _fecha
                _cuotas.txt_cant.Text = cuotas
                _cuotas.txt_precio.Text = _precio
                _cuotas.ShowDialog()
            End If
            Return False
        End If
    End Function
End Class